<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Promise
    // Promise 是异步编程的一种解决方案，比传统的解决方案——回调函数和事件——更合理和更强大

    // Promise实例的特征
    // （1）对象的状态不受外界影响。Promise对象代表一个异步操作，有三种状态：pending（进行中）、fulfilled（已成功）和rejected（已失败）。只有异步操作的结果，可以决定当前是哪一种状态，任何其他操作都无法改变这个状态。
    // =>   使用者根据异步操作的结果自行决定如何改变状态
    //  (2) 一旦状态改变，就不会再变，任何时候都可以得到这个结果。Promise对象的状态改变，只有两种可能：从pending变为fulfilled和从pending变为rejected。只要这两种情况发生，状态就凝固了，不会再变了，会一直保持这个结果，这时就称为 resolved（已定型）
    // 注意，为了行文方便，本章后面的resolved统一只指fulfilled状态，不包含rejected状态。


    var p = new Promise(function (resolve, reject) {
        // 回调函数(同步任务) -> 容器 -> 存放需要执行的异步操作(同步也可以)
        console.log("代码开始:1");

        // 异步代码: 未来改变状态
        setTimeout(function () {
            // debugger;
            console.log("异步开始:1");
            resolve(1);  //  {fulfilled:1} 
            // reject(2);  // {rejected:2}
            console.log("异步开始:", p);
        }, 2000);

        console.log("代码结束:3");
    });
    console.log("同步:", p);  // {pending:undefined}






</script>

</html>